package controlador.rrhh;

//

import java.util.ArrayList;
import java.util.List;
import modelo.TipoDocumento;
import modelo.TipoTelefono;
import modelo.Telefono;
import modelo.Domicilio;
//import modelo.TipoEspecialidad;
//import modelo.RangoEspecialidad;
import modelo.TipoCapacitacion;
//import modelo.Capacitacion;
//import modelo.Especialidad;
import modelo.Barrio;
import modelo.Capacitador;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import util.HibernateUtil;
import vista.rrhh.pantallaRegistrarCapacitador;
import controlador.utiles.gestorGeoLocalicacion;
import controlador.utiles.gestorBDvarios;
import util.Tupla;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
//import java.util.Set;
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Proyecto2010_Requerimientos-iuga
//  @ File Name : GestorModificarNuevoEmpleado.java
//  @ Date : 10/08/2010
//  @ Author : Fran
//
//




public class GestorModificarCapacitador   implements IGestorCapacitador {

        private pantallaRegistrarCapacitador pantalla;
        private TipoDocumento tipoDocumentoCapacitador;
	private String nroDocumento;
        private String nombreCapacitador;
        private String apellidoCapacitador;
        private String emailCapacitador;
        private String cuilCapacitador;
        private Date fechaNacimientoCapacitador;
        private Date fechaIngresoCapacitador;
	private Domicilio domicilioCapacitador;
	private Object listaPaises;
	private Object listaProvincias;
	private Object listaLocalidades;
	private Object listaBarrios;
        //private ArrayList<TipoEspecialidad> listaTipoEspecialidades;
        //private ArrayList<RangoEspecialidad> listaRangoEspecialidades;
        private ArrayList<TipoCapacitacion> listaTipoCapacitaciones;
       // private ArrayList<Date> listaVencimientoCapacitaciones;
        private ArrayList<String> listaNroTel;
        private ArrayList<TipoTelefono> listaTipoTel;
	//private Object especialidadesYRangos;
	private Object fechaActual;
	//private int legajoEmpleado;
        private String calleD;
        private int nmroD;
        private int pisoD;
        private String departamentoD;
        private String codigoPostalD;
        private Barrio barrioD;
        private Capacitador empleadoModif;
        //private int legajoEmpleadoOriginal;
        private String nroDocumentoOriginal;
        private String cuilCapacitadorOriginal;


    public GestorModificarCapacitador(pantallaRegistrarCapacitador pantalla)
    {
        this.pantalla = pantalla;
        ///listaTipoEspecialidades= new ArrayList<TipoEspecialidad>();
        //listaRangoEspecialidades= new ArrayList<RangoEspecialidad>();
        listaNroTel= new  ArrayList<String>();
        listaTipoTel= new ArrayList<TipoTelefono>();
        listaTipoCapacitaciones=new ArrayList<TipoCapacitacion>();
        // listaVencimientoCapacitaciones=new ArrayList<Date>();

    }


        public ArrayList<Tupla> mostrarTiposDeDocumento() {

           gestorBDvarios bdv = new gestorBDvarios();
           return bdv.getTiposDeDocumento();

	}


	public void verificarExistenciaEmpleado() {

	}
        public boolean ValidarDocumento(String nroDoc, Tupla td)
        {
            SessionFactory sf = HibernateUtil.getSessionFactory();
            Session sesion = sf.openSession();
            List listNroDoc=new ArrayList();
            boolean aprobado=true;
            listNroDoc =sesion.createQuery("Select nroDoc from modelo.Capacitador").list();//
            String n;
            for(int i=0; i<listNroDoc.size();i++)
            {
                n=(String)listNroDoc.get(i);
                if(n.equals(nroDoc))
                {
                    aprobado=false;
                    if(nroDocumentoOriginal.equals(nroDoc))
                    {aprobado=true;
                     break;}
                }
            }
            return aprobado;
        }
	
        public boolean ValidarCuil(String cuil)
        {
            SessionFactory sf = HibernateUtil.getSessionFactory();
            Session sesion = sf.openSession();
            List listNroDoc=new ArrayList();
            boolean aprobado=true;
            listNroDoc =sesion.createQuery("Select cuil from modelo.Capacitador").list();//
            String n;
            for(int i=0; i<listNroDoc.size();i++)
            {
                n=(String)listNroDoc.get(i);
                if(n.equals(cuil))
                {
                    aprobado=false;
                    if(cuilCapacitadorOriginal.equals(cuil))
                    {aprobado=true;
                     break;}
                }
            }
            return aprobado;
        }
	

        public ArrayList<Tupla> mostrarTiposDeTelefono() {

           gestorBDvarios bdv = new gestorBDvarios();
           return bdv.getTiposDeTelefono();

	}
	public ArrayList<Tupla> mostrarPaises() {

           gestorGeoLocalicacion ggl = new gestorGeoLocalicacion();
           return ggl.getPaises();

	}



	public ArrayList<Tupla> mostrarProvincias(int idPais)
        {
           gestorGeoLocalicacion ggl = new gestorGeoLocalicacion();
           return ggl.getProvincias(idPais);
	}

        public ArrayList<Tupla> mostrarLocalidades(int idProvincia) {

           gestorGeoLocalicacion ggl = new gestorGeoLocalicacion();
           return ggl.getLocalidades(idProvincia);

	}

	public ArrayList<Tupla> mostrarBarrios(int idLocalidad) {

           gestorGeoLocalicacion ggl = new gestorGeoLocalicacion();
           return ggl.getBarrios(idLocalidad);

	}


	

	
	public ArrayList<Tupla> mostrarTipoCapacitacion()
        {
            gestorBDvarios bdv = new gestorBDvarios();
           return bdv.getTipoCapacitacion();

	}
        public boolean levantarCapacitador(int id)
        {
            Session sesion;
            ///////////////////////////////////
             try {
                    sesion = HibernateUtil.getSession();
            //sesion.beginTransaction();
            empleadoModif = (Capacitador) sesion.createQuery("from Capacitador where id ="+id).uniqueResult();
              } catch (Exception ex)
            {
                System.out.println("Error levantando el capacitador");
                return false;
            }
            //legajoCapacitadorOriginal=empleadoModif.getLegajo();
            nroDocumentoOriginal=empleadoModif.getNroDoc();
            cuilCapacitadorOriginal=empleadoModif.getCuil();
            //Envio a la pantalla los datos personales del empleado levantado
            pantalla.datosPersonalesCapacitador(empleadoModif.getCuil(), empleadoModif.getNroDoc(), empleadoModif.getTipoDoc().getId(),empleadoModif.getNombre(), empleadoModif.getApellido(), empleadoModif.getFechadeNac(), empleadoModif.getEmail());
            //Envio a la pantalla los telefonos del empleado levantado
            Telefono[] tel=empleadoModif.getTelefonos().toArray(new Telefono[0]);
            ArrayList listaNro=new ArrayList<String>();
            ArrayList listaTipoT=new ArrayList<Tupla>();
            for(int i=0; i<tel.length;i++)
            {
               TipoTelefono td= tel[i].getTipo();
               Tupla tup=new Tupla();
               tup.setId(td.getId());
               tup.setNombre(td.getNombre());
               listaTipoT.add(tup);
               listaNro.add(tel[i].getNumero());
            }
            pantalla.telefonosCapacitador( listaNro , listaTipoT);
            //Envio a la pantalla los datos del domicilio del empleado levantado
            if(empleadoModif.getDomicilio().getBarrio()!=null)
            {
            gestorGeoLocalicacion ggl = new gestorGeoLocalicacion();
            int idLocalidad=ggl.getLocalidadDeBarrio(empleadoModif.getDomicilio().getBarrio().getId()).getId();
            int idProvincia=ggl.getProvinciaDeLocalidad(idLocalidad).getId();
            int idPais=ggl.getPaisDeProvincia(idProvincia).getId();            
            pantalla.datosDomicilioCapacitador(empleadoModif.getDomicilio().getCalle(),String.valueOf(empleadoModif.getDomicilio().getNumero()), empleadoModif.getDomicilio().getDepto(),  String.valueOf(empleadoModif.getDomicilio().getPiso()), empleadoModif.getDomicilio().getCodigoPostal(), idPais, idProvincia, idLocalidad,empleadoModif.getDomicilio().getBarrio().getId());
            }
            else
            {pantalla.datosDomicilioCapacitador(empleadoModif.getDomicilio().getCalle(),String.valueOf(empleadoModif.getDomicilio().getNumero()), empleadoModif.getDomicilio().getDepto(),  String.valueOf(empleadoModif.getDomicilio().getPiso()), empleadoModif.getDomicilio().getCodigoPostal());}
            //Envio a la pantalla las capacitaciones del empleado levantado
            TipoCapacitacion[] cap= (TipoCapacitacion[])empleadoModif.getTiposCapacitacion().toArray(new TipoCapacitacion[0]);//¿¿?? no se pq en este tengo q castear y en los otros no hace falta...
             //Capacitacion[] cap= empleadoModif.getCapacitaciones().toArray(new Capacitacion[0]);
            ArrayList listaFechaVen=new ArrayList<Date>();
            ArrayList listaTipoC=new ArrayList<Tupla>();
            for(int i=0; i<cap.length;i++)
            {
               //TipoCapacitacion tc= cap[i].getTipoCapacitacion();
               Tupla tup=new Tupla();
               tup.setId(cap[i].getId());
               tup.setNombre(cap[i].getNombre());
               listaTipoC.add(tup);
               
            }
            pantalla.capacitacionesCapacitador( listaTipoC);
            //Envio a la pantalla las especialidades del empleado levantado
           // Especialidad[] esp= empleadoModif.getEspecialidades().toArray(new Especialidad[0]);

            //ArrayList listaRango=new ArrayList<Tupla>();
           // ArrayList listaTipoE=new ArrayList<Tupla>();
           // for(int i=0; i<esp.length;i++)
           // {
               //TipoEspecialidad te= esp[i].getTipo();
               //RangoEspecialidad re=esp[i].getRango();
              // Tupla tupE=new Tupla();
              // tupE.setId(te.getId());
              // tupE.setNombre(te.getNombre());
              // listaTipoE.add(tupE);
              // Tupla tupR=new Tupla();
              // tupR.setId(re.getId());
              // tupR.setNombre(re.getNombre());
              // listaRango.add(tupR);
          //  }

           // pantalla.especialidadesCapacitador(listaTipoE, listaRango);
            ////
            return true;
           /* } catch (Exception ex)
            {
                System.out.println("Error levantando el empleado");
                return false;
            }*/
        }
        
        
        
        public void datosPersonalesCapacitador(String cuil, String nmroDoc, Tupla tipoDocumento, String nombre, String apellido, Date fechaNac, String email)
        {
            //legajoEmpleado=leg;
            nroDocumento=nmroDoc;
            gestorBDvarios bdv = new gestorBDvarios();
            tipoDocumentoCapacitador=bdv.getTipoDeDocumento(tipoDocumento.getId());
            nombreCapacitador=nombre;
            apellidoCapacitador=apellido;
            emailCapacitador=email;
            fechaNacimientoCapacitador=fechaNac;
            cuilCapacitador=cuil;
            //fechaIngresoEmpleado=fechaIng;

	}

	public void datosDomicilioCapacitador(String calle, String nro, String depto, String piso, String cp, Tupla tBarrio)
        {
            gestorGeoLocalicacion ggl = new gestorGeoLocalicacion();
            if(tBarrio.getId()<=0)
            {barrioD=null;}
            else
            {barrioD =ggl.getBarrio(tBarrio.getId());}
            if(nro.equals(""))
            {nmroD=0;}
            else{
            nmroD=Integer.parseInt(nro);}
            if(nro.equals(""))
            {pisoD=0;}
            else{
            pisoD =Integer.parseInt(piso);}
            calleD=calle;
            departamentoD=depto;
            codigoPostalD=cp;

	}
        public void telefonosCapacitador(ArrayList<String> numero,ArrayList<Tupla> tipo )
        {


            listaNroTel=numero;
            listaTipoTel=new ArrayList();
            gestorBDvarios bdv = new gestorBDvarios();
            for(int i=0; i<tipo.size();i++)
            {
               TipoTelefono td= bdv.getTipoDeTelefono(tipo.get(i).getId());
               listaTipoTel.add(td);
            }
	}
	

        public void tiposCapacitacion(ArrayList<Tupla> lstTipoCapacitaciones)
        {

        listaTipoCapacitaciones=new ArrayList<TipoCapacitacion>();
         
            gestorBDvarios bdv = new gestorBDvarios();
            for(int i=0; i<lstTipoCapacitaciones.size();i++)
            {
                listaTipoCapacitaciones.add(bdv.getTipoCapacitacion(lstTipoCapacitaciones.get(i).getId()));
                
            }

	}

	public boolean capacitadorModificado()
        {
           // Capacitador capacitador;
            
            Session sesion;
            ///////////////////////////////////
             try {
                    sesion = HibernateUtil.getSession();
                     //SessionFactory sf = HibernateUtil.getSessionFactory();
                    //sesion = sf.openSession();
                    try{
                    HibernateUtil.beginTransaction();
                    //sesion.beginTransaction();
                    ////////////////////////////////
                    Iterator ittv=empleadoModif.getTelefonos().iterator();
                    while(ittv.hasNext())
                    {
                        Telefono tel=(Telefono)ittv.next();
                        sesion.delete(tel);
                    }
                    
                    if(empleadoModif.getDomicilio()!=null)
                    {sesion.delete(empleadoModif.getDomicilio());}
                    //sesion.delete(empleadoModif);
                    ////////////////////////////
                    ////////////////////////////////
                   try{
                    //capacitador=modificarCapacitador();
                    modificarCapacitador();
                   }
                    catch (Exception ex)
                    {
                    System.out.println("No se pudo modificar el empleado");
                    return false;
                    }
                    Iterator itt=empleadoModif.getTelefonos().iterator();
                    while(itt.hasNext())
                    {
                        Telefono tel=(Telefono)itt.next();
                        sesion.save(tel);
                    }
                    
                   /*Iterator itCap=capacitador.getCapacitaciones().iterator();
                    while(itCap.hasNext())
                    {
                        Capacitacion cap=(Capacitacion)itCap.next();
                        sesion.save(cap);
                    }*/
                    if(empleadoModif.getDomicilio()!=null)
                    {
                        sesion.save(empleadoModif.getDomicilio());
                        //sesion.update(empleado.getDomicilio());
                    }
                    sesion.saveOrUpdate(empleadoModif);
                    //sesion.update(empleado);
                    ////////////////////////////

                     //sesion.getTransaction().commit();
                   HibernateUtil.commitTransaction();

                    return true;
                    }catch(Exception e) {
                        System.out.println("No se pudo realizar la transaccion\n"+e.getMessage());
                        HibernateUtil.rollbackTransaction();

                        return false;
                }
            } catch (Exception ex)
            {
                System.out.println("No se pudo abrir la sesion");
                return false;
            }

	}

	

	public void buscarUltimoLegajoEmpleado() {

	}
        public void vaciarDatos()
        {
        tipoDocumentoCapacitador=null;
	nroDocumento=null;
        nombreCapacitador=null;
        apellidoCapacitador=null;
        emailCapacitador=null;
        cuilCapacitador=null;
        fechaNacimientoCapacitador=null;
        fechaIngresoCapacitador=null;
       // legajoCapacitador=0;
        calleD=null;
        nmroD=0;
        pisoD=0;
        departamentoD=null;
        codigoPostalD=null;
        barrioD=null;
        }
	public void modificarCapacitador()
        {

            //Date fechaAltaActual=new Date();
           // fecha_Alta=System
           
           empleadoModif.setNombre(nombreCapacitador);
           empleadoModif.setApellido(apellidoCapacitador);
           empleadoModif.setFechadeNac(fechaNacimientoCapacitador);
           empleadoModif.setTipoDoc(tipoDocumentoCapacitador);
           empleadoModif.setNroDoc(nroDocumento);
           empleadoModif.setCuil(cuilCapacitador);
           empleadoModif.setEmail(emailCapacitador);
           empleadoModif.setDomicilio(calleD, nmroD, pisoD, departamentoD, codigoPostalD, barrioD);
           empleadoModif.setTelefonos(listaNroTel, listaTipoTel);
           empleadoModif.setTiposCapacitacion(listaTipoCapacitaciones);
           
           // Capacitador emp=new Capacitador(nombreCapacitador, apellidoCapacitador,fechaNacimientoCapacitador, tipoDocumentoCapacitador ,nroDocumento, cuilCapacitador,  emailCapacitador,  calleD,  nmroD,  pisoD,  departamentoD,  codigoPostalD,  barrioD ,  listaNroTel, listaTipoTel, listaTipoCapacitaciones,  empleadoModif.getFechaAlta());
            //Empleado emp=new Empleado(legajoEmpleado,nombreEmpleado, apellidoEmpleado,fechaNacimientoEmpleado, tipoDocumentoEmpleado ,nroDocumento, cuilEmpleado,  emailEmpleado,  calleD,  nmroD,  pisoD,  departamentoD,  codigoPostalD,  barrioD , listaTipoEspecialidades, listaRangoEspecialidades ,HlistaNroTel, HlistaTipoTel, fechaAltaActual);
            
           

	}

	public void finCU() {

	}

	

	public void seleccionTipoDocumento() {

	}

	public void documentoEmpleado() {

	}

}
